// 1.引入axios
import axios from 'axios'
// 2.引入router
import router from '@/router'
// 3.引入vant
import {showToast} from 'vant'
// 4. 引入store
import {useUserStore} from '@/stores'

// 1. 创建axios实例
const baseURL = 'https://consult-api.itheima.net/'
const request = axios.create({
    baseURL,
    timeout: 5000
})
// 2. 请求拦截器，携带token
request.interceptors.request.use(config => {
    // 2.1 判断是否有token
    const store = useUserStore()
    if(store.user?.token&&config.headers){
        // 2.2 携带token
        config.headers.Authorization = `Bearer ${store.user?.token}`
    }
    return config
}, error => {
    return Promise.reject(error)
})
// TODO: 3. 响应拦截器,剥离无效数据，401拦截
request.interceptors.response.use(response => {
    // 后台约定，响应成功，但是code不是10000，是业务逻辑失败
    if(response.data.code !== 10000){
        // 3.1 提示用户
        showToast(response.data.message)
        return Promise.reject(response.data)
    }
    // 业务逻辑成功，返回响应数据，作为axios成功的结果
    return response.data
}, error => {
    // 3.2 401拦截
    if(error.response.status === 401){
        // 删除用户信息
        const store = useUserStore()
        store.delUser()
        // 3.3 重定向到登录页
        router.push({
            path: '/login',
            query:{returnUrl: router.currentRoute.value.fullPath}
        })
        // 3.4 提示用户
        showToast('登录已过期，请重新登录')
    }
    return Promise.reject(error)
})
export { baseURL, request }